// 一、
//
// 我认为异步编程由于js是单线程的，所以一次只能完成一件事情。异步就是有关阻塞，阻塞的情况下，只能等待前面一件事情完成了，才可以完成下一件事情。
//
// 常见的异步编程有回调函数，es6的Promise，es7 Async/Await（Gentor的语法糖）。
//
// EventLoop就是js异步运行的一个机制（模仿多线程），
//
// 先判断当前的代码是同步的还是异步的，同步的直接放在执行栈上，异步的先判断是宏任务还是微任务。
//
// 如果代码是宏任务就放在宏任务的队列中，微任务就放在微任务的队列中。
//
// 然后执行一个宏任务之后就执行全部的微任务只到为空位置
//
// 大概流程就是 同步代码 =》 一个宏任务 =》全部微任务 这样的执行流程

// 常见的宏任务有
//
// - setTimeout
// - setInterval
//
// 常见的微任务有
//
// - Promise

// 2.

/*
  将下面异步代码使用 Promise 的方法改进
  尽量用看上去像同步代码的方式
  setTimeout(function () {
    var a = 'hello'
    setTimeout(function () {
      var b = 'lagou'
      setTimeout(function () {
        var c = 'I ♥ U'
        console.log(a + b +c)
      }, 10)
    }, 10)
  }, 10)
*/

let a = new Promise((resolve, reject) => {
  resolve('hello ')
}).then( str => {
  return str + 'laguo '
}).then( str => {
  return str + 'I love you'
}).then( str => {
  console.log(str)
})

console.log(a)
